import Vue from 'vue'
import App from './App.vue'
import store from './store'
import ElementUI from 'element-ui';

/* 各类封装 */
import Axios from '@/global/request/axios'; // 网络请求
import Utils from '@/global/utils'; // 公共函数
import msg from '@/global/utils/msg'; // 提示消息
import msgBox from '@/global/utils/msgBox'; // 提示对话框
import Validate from '@/global/utils/validate'; //正则验证
import config from '@/global/config'; // 本地数据集
import Storage from '@/global/storage'; // 本地储存
import * as filters from '@/global/utils/filters'; // 时间格式化
import Uploader from '@/components/upload';  //上传组件
import Tinymce from '@/components/tinymce'; // 富文本编辑器
import Comment from '@/components/comment'; // 评论编辑器
import Emojis from '@/components/emojis';

/* 引入样式文件 */
import 'element-ui/lib/theme-chalk/index.css'; // 引入element-ui样式
import './global/styles/emoji/emoji.css';
import './global/styles/emoji/index.css';

Vue.config.productionTip = false

/* 初始化模块注册 */
Vue.use(ElementUI);

// 上传组件注册
Vue.use(Uploader);
Vue.use(Tinymce);
Vue.use(Comment);
Vue.use(Emojis)

/* 全局变量 */
Vue.prototype.$axios = Axios;
Vue.prototype.$utils = Utils;
Vue.prototype.$msg = msg;
Vue.prototype.$msgBox = msgBox;
Vue.prototype.$config = config;
Vue.prototype.$validate = Validate;
Vue.prototype.$storage = Storage;

Vue.prototype.$formSize = 'small';
Vue.prototype.$tableSize = 'small';
Vue.prototype.$btnSize = 'mini';

// 表单action统一宽度
Vue.prototype.$minActionWidth = '100'; // 一般用于1标签
Vue.prototype.$defaultActionWidth = '190'; // 一般用于2个标签
Vue.prototype.$maxActionWidth = '320'; // 一般用于3个标签

const init = async () => {
    const module = await import('./router')
    const router = await module.default

    // 验证页面按钮是否有权限
    Vue.prototype.isAuth = function (code = '') {
        const authArr = router.history.current.meta.auth;
        if (code != '') {
            if (authArr.indexOf(code) >= 0) {
                return true;
            } else {
                return false;
            }
        }
    };

    //注册过滤器
    Object.keys(filters).forEach(key => {
        Vue.filter(key, filters[key])
    });

    new Vue({
        router,
        store,
        render: h => h(App)
    }).$mount('#app')

};

init()


